#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <math.h>
#include <algorithm>
using namespace std;

bool isMatch(string s, string p) {
    int sSize=s.size(),pSize=p.size();
    bool result[sSize+1][pSize+1];
    for(int i=0;i<sSize+1;i++){
        for(int j=0;j<pSize+1;j++){
            result[i][j]=false;
        }
    }
    result[0][0]=1;
    for(int i=0;i<pSize;i++){
        if(p[i]=='*'){
            result[0][i+1]=result[0][i];
        }
    }

    for(int i=0;i<sSize;i++){
        for(int j=0;j<pSize;j++){
            if(s[i]==p[j]||p[j]=='?'){
                result[i+1][j+1]=result[i][j];
            }
            else if(p[j]=='*'){
                result[i+1][j+1]=result[i][j+1]||result[i+1][j];
            }
        }
    }

    for(int i=0;i<sSize+1;i++){
        for(int j=0;j<pSize+1;j++){
            cout<<result[i][j]<<",";
        }
        cout<<"\n";
    }
    return result[sSize][pSize];
}

bool isMatch1(string s, string p) {
    int sSize=s.size(),pSize=p.size();
    vector<vector<bool>>result(sSize+1,vector<bool>(pSize+1,0));
    result[0][0]=1;
    for(int i=0;i<pSize;i++){
        if(p[i]=='*'){
            result[0][i+1]=result[0][i];
        }
    }
    for(int i=0;i<sSize;i++){
        for(int j=0;j<pSize;j++){
            if(s[i]==p[j]||p[j]=='?'){
                result[i+1][j+1]=result[i][j];
            }
            else if(p[j]=='*'){
                result[i+1][j+1]=result[i][j+1]||result[i+1][j];
            }
        }
    }

    for(int i=0;i<sSize+1;i++){
        for(int j=0;j<pSize+1;j++){
            cout<<result[i][j]<<",";
        }
        cout<<"\n";
    }
    return result[sSize][pSize];
}

int main(){
    cout<<isMatch1("cb","?a")<<endl;
    return 0;
}